package com.cnpinxi.service;


import com.cnpinxi.domain.Order;
import com.cnpinxi.domain.PayParameter;
import com.cnpinxi.domain.User;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by baggio on 2016/12/26.
 */
public interface OrderService {
    static Map<Long, Object> PAYMAP = new HashMap<Long, Object>();
    /**
     * 订单状态 ：-2 已经删除订单
     */
    static final Byte DELETE = -2;
    /**
     * 订单状态 ：-1 已过期
     */
    static final Byte OVER_TIME = -1;
    /**
     * 订单状态 ：0 已取消
     */
    static final Byte CANCEL = 0;
    /**
     * 订单状态 ：1 未付款
     */
    static final Byte UNPAY = 1;
    /**
     * 订单状态 ：2 已付款
     */
    static final Byte PAYED = 2;
    /**
     * 订单状态 ：3 未验证
     */
    static final Byte UNVIERIFYE = 3;
    /**
     * 订单状态 ：4 已验证
     */
    static final Byte VIERIFYED = 4;
    /**
     * 订单状态 ：5 交易完成
     */
    static final Byte COMPELTEED = 5;
    /**
     * 订单状态 ：6 申请退款
     */
    static final Byte REFUND = 6;
    /**
     * 订单状态 ：7 取消退款
     */
    static final Byte CANCEL_REFUND = 7;
    /**
     * 订单状态 ：已退款
     */
    static final Byte REFUNDED = 8;
    /**
     * 订单状态 ：订单关闭
     */
    static final Byte CLOSE = 9;

    /**
     * 订单状态 ：部分支付
     */
    static final Byte PAY_PART = 10;

    /**
     * 订单状态 ：支付失败订单关闭
     */
    static final Byte PAY_FAIL_CLOSE = 11;
    /**
     * 订单状态 ：待发货
     */
    static final Byte WAIT_DISPATCH = 12;
    /**
     * 订单状态 ：已发货,待收货
     */
    static final Byte DISPATCHED = 13;
    /**
     * 订单状态 ：已收货
     */
    static final Byte RECEIVED = 14;

    /**
     * 创建订单
     */
    Order createOrder(Map<String, String> map, User user);

    /**
     * 取消订单
     */
    Boolean cancelOrder(Long orderId);

Boolean modifyOrder(Order order);

    /**
     * 支付订单，完成后调用支付接口
     *
     * @param
     */
    List<PayParameter> toPay(Long orderId,  String paymentListJSON, String remoteAddr, String openid) throws Exception;

    /**
     * 查询订单列表
     */
    List<Order> getOrderList(Map<String, String> map);
    List<Order> getOrderByUserId(Long userId);

    Order getOrderById(Long orderId);
    Order getOrder(Map<String, String> map);


    Boolean modifyOrderStatus(Long orderItemId, Byte status);


Integer getOrderPricAmount(Map<String,String> map);

    Boolean closeOrder(Long orderId);
    Boolean completeOrder(Long orderId);





}
